home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 November / macformat-018.iso / Utility Spectacular / ScreenSavers / Clock screen saver Folder / menus.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-09  |  2.7 KB  |  136 lines  |  [TEXT/MPS ]

  1. #include "screen.h"
  2.  
  3. #define mApple        1
  4. #define mFile         2
  5. #define mFont        3
  6. #define mStyle        4
  7. #define mMinutes    5
  8.  
  9. extern short font;
  10. extern short style;
  11. extern unsigned long IDLETICKS;
  12.  
  13. extern struct screen *screenlist;
  14.  
  15. extern void MBarRestore(void);
  16. extern void WritePrefs(void);
  17.  
  18. void createmenus(void) {
  19.     unsigned char        minutesItem[] = "\p 1";
  20.     Handle                theMenuBar;
  21.     MenuHandle            theMenu;
  22.     long                number;
  23.     
  24.     theMenuBar = GetNewMBar(128);
  25.     SetMenuBar(theMenuBar);
  26.     
  27.     AddResMenu(GetMHandle(mApple),'DRVR');
  28.  
  29.     
  30.     AddResMenu(GetMHandle(mFont),'FONT'); // will also get FONDs, see I.M. IV
  31.  
  32.  
  33.     theMenu = GetMHandle(mMinutes);
  34.     for (number=1; number<30; number++) {
  35.         NumToString(number,minutesItem);
  36.         AppendMenu(theMenu,minutesItem);
  37.         };
  38.     CheckItem(theMenu,IDLETICKS/60/60,TRUE);
  39.     
  40.     DrawMenuBar();
  41.     return;
  42. }
  43.  
  44. void domenu(long result) {
  45.     short        theItem;
  46.     short        theMenu;
  47.     Str255        name;
  48.     short        temp;
  49.     WindowPtr    myWindow;
  50.     struct screen *screen;
  51.     
  52.     theItem = LoWord(result);            /* gets item number */
  53.     theMenu = HiWord(result);            /* gets menu number */
  54.     
  55.     switch(theMenu) {
  56.         static short checkedFont=0;
  57.         case mApple:
  58.             GetPort(&myWindow);
  59.             switch (theItem) {
  60.             case 1:
  61.                 Alert(128,(ProcPtr)nil);
  62.                 break;
  63.             case 2:
  64.                 for (screen=screenlist; screen; screen=screen->next)
  65.                     simulateidle(screen);                
  66.                 break;
  67.             default:
  68.                 GetItem(GetMHandle(mApple),theItem,name);
  69.                 OpenDeskAcc(name);
  70.                 SetPort(myWindow);
  71.             };
  72.             break;
  73.         case mFile:
  74.             MBarRestore();
  75.             WritePrefs();
  76.             ExitToShell(); // Quit is the only thing in the File menu
  77.             break;
  78.         case mFont:
  79.             CheckItem(GetMHandle(mFont),checkedFont,FALSE);
  80.             GetItem(GetMHandle(mFont),theItem,name);
  81.             CheckItem(GetMHandle(mFont),theItem,TRUE);
  82.             checkedFont = theItem;
  83.             GetFNum((ConstStr255Param)name,&font);
  84.             break;
  85.         case mStyle:
  86.             temp = 1<<theItem-1;
  87.             if (style & temp) {            // style already active, turn it off
  88.                 CheckItem(GetMHandle(mStyle),theItem,FALSE);
  89.                 style -= temp;
  90.                 }
  91.             else {
  92.                 CheckItem(GetMHandle(mStyle),theItem,TRUE);
  93.                 style += temp;
  94.                 };
  95.             break;
  96.         case mMinutes:
  97.             CheckItem(GetMHandle(mMinutes),(IDLETICKS/60/60),FALSE);
  98.             IDLETICKS = (theItem * 60 * 60);
  99.             CheckItem(GetMHandle(mMinutes),theItem,TRUE);
  100.             break;
  101.         default:
  102.             break;
  103.         };
  104.         
  105.     HiliteMenu(0);
  106.     return;
  107. }
  108.  
  109.  
  110. void doevent(EventRecord event) {
  111.     WindowPtr        myWindow;
  112.  
  113.     switch(event.what) {
  114.         case mouseDown:
  115.             switch (FindWindow(event.where,&myWindow)) {
  116.                 case inMenuBar:
  117.                     domenu(MenuSelect(event.where));
  118.                     break;
  119.                 case inSysWindow:
  120.                     SystemClick(&event,myWindow);
  121.                     break;
  122.                 default:
  123.                     break;
  124.             };
  125.             break;
  126.         case keyDown:
  127.         case autoKey:
  128.             if (event.modifiers & cmdKey)
  129.                 domenu(MenuKey(event.message & charCodeMask));
  130.             break;
  131.         default:
  132.             break;
  133.     };
  134.     return;
  135. }
  136.